#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<signal.h>
#include<sys/time.h>
#include<fcntl.h>
#include<unistd.h> 
#include<pthread.h>

void print_set(const sigset_t& set){
	int n = 32;
	while(-- n)
	{
		if(sigismember(&set, n)){
			putchar('1');
		}
		else{
			putchar('0');
		}
	}
	printf("\n");
}

int main(int argc, char* args[])
{
	sigset_t set, mask, pend;

	sigemptyset(&set);
	sigemptyset(&mask);


	sigaddset(&set, SIGINT);
	
	int ret;
	ret = sigprocmask(SIG_BLOCK, &set, &mask);
	if(ret < 0){
		perror("sigprocmask error");
		exit(1);
	}
	
	ret = sigpending(&pend);
	if(ret < 0){
		perror("sigpending error");
		exit(1);
	}

	ret = sigismember(&pend, SIGINT);
	if(!ret){
		printf("before SIGINT is not recive\n");
		print_set(pend);
	}
	
	kill(getpid(), SIGINT);

	ret = sigpending(&pend);
	if(ret < 0){
		perror("sigpending error");
		exit(1);
	}
	
	ret = sigismember(&pend, SIGINT);
	if(ret){
		printf("recive the SIGINT\n");
		print_set(pend);
	}

	return 0;
}
